package mapper;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import modelo.Jugada;
import modelo.JugadaConPremio;
import modelo.JugadaSimple;

public class AdmPersistenciaJugada  extends AdmPersistencia<Jugada> {
	
	private static AdmPersistenciaJugada instancia;
	
	private AdmPersistenciaJugada()
	{
		
	}
	
	public static AdmPersistenciaJugada getInstancia()
	{
		if (instancia == null)
			instancia = new AdmPersistenciaJugada();
		return instancia;
	}
	@Override
	public void insertar(Jugada a) {
		try
		{
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("insert into dbo.Jugada (?,?,?,?,?,?)");
			//agregar campos
			s.setLong(1, a.getId());
			s.setInt(2, a.getIdTragamonedas());
			s.setNull(3, 0);
			s.setDate(4, (Date) a.getFecha());
			s.setFloat(5, (int) a.getCredito());
			s.setInt(6, (int) a.getPrecioJugada());
			s.setInt(7, (int) a.getCreditoAcumulado());
			s.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
		}
	}

	@Override
	public void actualizar(Jugada a) {
		// TODO Auto-generated method stub
		try
		{
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("update dbo.Jugada " +
				"set id_jugada = ?," +
				"id_tragamonedas =?," +
				"id_premio =?," +
				"fecha =?," +
				"credito =?," +
				"precioJugada =?," +
				"creditoAcum =? where id_jugada = ?");
			//agregar campos
			s.setLong(1, a.getId());
			s.setInt(2, a.getIdTragamonedas());
			s.setNull(3, 0);
			s.setDate(4, (Date) a.getFecha());
			s.setFloat(5, (int) a.getCredito());
			s.setInt(6, (int) a.getPrecioJugada());
			s.setInt(7, (int) a.getCreditoAcumulado());
			s.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
		}
	}

	@Override
	public void borrar(Jugada a) {
		// TODO Auto-generated method stub
		try
		{
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("delete from dbo.Jugada where id_jugada = ?");
			s.setLong(1, a.getId());
			s.execute();
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
		}
	}

	@Override
	public ArrayList<Jugada> seleccionar(long id) {
		ArrayList<Jugada> jugadas;

		try
		{
			jugadas = new ArrayList<Jugada>();
			Jugada a = null;
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("select id_jugada, id_tragamonedas, id_premio, fecha, credito, precioJugada, creditoAcum from dbo.Jugada where id_tragamonedas = ?");
			s.setLong(1,id);
			ResultSet result = s.executeQuery();
			while (result.next())
				{
					long idJugada =  result.getLong(1);
					int idTragamonedas =  result.getInt(2);
					int idPremio = result.getInt(3);
					Date fecha =  result.getDate(4);
					float credito =  result.getFloat(5);
					float precioJugada = result.getFloat(6);
					float creditoAcumulado = result.getFloat(7);
				
					if(idPremio == 0){
						a = new JugadaConPremio(idJugada, idTragamonedas, idPremio, fecha, credito, precioJugada, creditoAcumulado);
					} else {
						a = new JugadaSimple(idJugada, idTragamonedas, idPremio, fecha, credito, precioJugada, creditoAcumulado);
					}
					
					jugadas.add(a);
				}
							
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return jugadas;
			}
			catch (Exception e)
			{
				System.out.println(e.getMessage());
			}
			return null;
	}

	@Override
	public Jugada buscar(long id) {
		try
		{
			Jugada a = null;
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("select id_jugada, id_tragamonedas, id_premio, fecha, credito, precioJugada, creditoAcum from dbo.Jugada where id_jugada = ?");
			s.setLong(1,id);
			ResultSet result = s.executeQuery();
			while (result.next())
			{
				long idJugada = result.getLong(1);
				int idTragamonedas = result.getInt(2);
				int idPremio = result.getInt(3);
				Date fecha = result.getDate(4);
				float credito = result.getFloat(5);
				float precioJugada = result.getFloat(6);
				float creditoAcumulado = result.getFloat(7);
				
				if(idPremio == 0){
					a = new JugadaConPremio(idJugada, idTragamonedas, idPremio, fecha, credito, precioJugada, creditoAcumulado);
				} else {
					a = new JugadaSimple(idJugada, idTragamonedas, idPremio, fecha, credito, precioJugada, creditoAcumulado);
				}
			}
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return a;
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
		}
		return null;
	}

}
